﻿using System;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Input;

namespace AllInOne
{
	/// <summary>
	/// Interaction logic for MainWindow.xaml
	/// </summary>
	public partial class MainWindow
    {
        #region Inicialização

        public MainWindow()
		{
			this.InitializeComponent();
		}

        #endregion

        #region Métodos de criação dinâmica dos componentes

        /// <summary>
        /// Remove os componentes contidos na tela e adiciona a tela solicitada
        /// </summary>
        /// <param name="nome">Nome da tela configurado no 'CommandParameter' do botão da ribbon</param>
        private void chamarTela(string nome)
        {
            if (!String.IsNullOrEmpty(nome))
            {
                //Consulta a fábrica de componentes para retornar uma nova instância
                UserControl novaTela = ControlFactory(nome);

                if (novaTela != null)
                {
                    //Limpa o componente que exibe as telas 
                    dockTelas.Children.Clear();
                    dockTelas.Children.Add(novaTela);
                }
            }
        }

        /// <summary>
        /// É uma fábrica de componentes
        /// Recebe o nome configurado no 'CommandParameter' dos botões da ribbon
        /// e retorna o componente correspondente
        /// </summary>
        /// <param name="tipo">'CommandParameter' configurado no botão da ribbon que foi previamente associado a um componente</param>
        /// <returns>Uma nova instância do componente solicitado</returns>
        private UserControl ControlFactory(String tipo)
        {
            switch (tipo)
            {
                case "servicosPesquisar":
                    return new TelaServicosPesquisar();
                case "servicosAdicionar":
                    return new TelaServicosAdicionar();

                case "materiaisAdicionar":
                    return new TelaMateriaisAdicionar();
                case "materiaisPesquisar":
                    return new TelaMateriaisPesquisar();

                case "orcamentosAdicionar":
                    return new TelaOrcamentosAdicionar();

                case "clienteAdicionar":
                    return new TelaClienteAdicionar();
                

                default:
                    return null;
            }
        }

        #endregion

        #region Ações dos comandos

        private void RibbonCommand_Executed(object sender, ExecutedRoutedEventArgs e)
        {
            if (e.Parameter != null)
            {
                String tela = e.Parameter.ToString();
                chamarTela(tela);
            }
        }

        private void OnCanExecute(object target, CanExecuteRoutedEventArgs args)
		{
			args.CanExecute = true;
            
		}
		
		private void OnShowOrcamentoGroup (object target, ExecutedRoutedEventArgs args)
		{
			MessageBox.Show("Este é o grupo do orçamento.", "Grupo: Orçamento");
		}
		
		private void OnShowMaterialGroup (object target, ExecutedRoutedEventArgs args)
		{			
			MessageBox.Show("Este é o grupo dos materiais.", "Grupo: Materiais");				
		}	
		
		private void OnShowServicosGroup (object target, ExecutedRoutedEventArgs args)
		{			
			MessageBox.Show("Este é o grupo dos serviços.", "Grupo: Serviços");
        }

        #endregion
      
    }
}